package cn.psvmc.cxzapi.mapper.order;

import cn.psvmc.cxzapi.config.mybatisplus.mapper.MyBaseMapper;
import cn.psvmc.cxzapi.model.common.OrderEntity;
import cn.psvmc.cxzapi.model.order.TOrderBill;
import cn.psvmc.cxzapi.model.order.TOrderLog;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 订单账单表 Mapper 接口
 * @Author auto
 * @Date 2024-08-12
 */
public interface TOrderBillMapper extends MyBaseMapper<TOrderBill> {

    //根据订单号和租期查询账单
    TOrderBill selectByOrderIdAndPeriod(@Param("orderId") Integer orderId, @Param("period") Integer period, @Param("orderCode") String orderCode);

    //账单列表
    IPage<Map<String, Object>> listBill(Page<TOrderLog> queryPage,@Param("entity") OrderEntity entity);

    //账单导出列表
    List<Map<String, Object>> listBill(@Param("entity") OrderEntity entity);

    //获取待支付金额
    List<TOrderBill> getDepositPay(@Param("orderId") Integer orderId);

    //客户当前及之前的期的账单列表
    List<TOrderBill> listCustomerBillByOrderId(@Param("orderId") Integer orderId);

    //获取订单最后一笔账单信息
    TOrderBill findLastBillByOrderId(@Param("orderId") Integer orderId);

    //更新账单交易号
    void updateTradeNo(@Param("bills") List<Map<String, Object>> bills);

    //获取第一期账单
    Map<String, Object> getFirstBill(@Param("orderId") Integer orderId);

    //更新账单交易号
    void updateOneTradeNo(@Param("bill") Map<String, Object> bill);

    //获取账单详情（退款用）
    List<TOrderBill> listBillByOrderIdForRefund(@Param("orderId") Integer orderId, @Param("billStatus") int billStatus);

    //获取账单列表（退款用）
    List<TOrderBill> listBillForRefund(@Param("orderId") Integer orderId);

    //更新账单状态
    void updateBillStatus(@Param("bill") TOrderBill bill);

    //更新账单交易状态
    void updateTradeStatus(@Param("bill") TOrderBill bill);

    //更新结算信息
    void updateByTransactionId(@Param("bill") TOrderBill bill);

    //获取订单取消账单
    List<TOrderBill> listCancelOrderBill();

    //根据订单状态查询账单列表
    List<TOrderBill> listBillByOrderStatus(@Param("orderStatus") int orderStatus);

    //获取商家账单
    List<TOrderBill> listBillByStoreId(@Param("storeId") int storeId);

    //根据流水号获取账单信息
    TOrderBill findByTransactionId(@Param("transactionId") String transactionId);

    //获取可退款金额
    double getRefundableAmount(@Param("orderId") Integer orderId);

    //获取账单详情（重新生成账单用）
    TOrderBill findByObId(@Param("obid") Integer obid);

    //服务端扣款更新账单状态
    void updateByIdForService(@Param("bill") TOrderBill bill);

    //根据订单id查询续租账单
    List<Map> listRenewByOrderId(@Param("orderId") Integer orderId, @Param("planEnd") Object planEnd);

    //更新账单租期
    void updatePeriod(@Param("orderId") Integer orderId, @Param("day") int day);

    //更新账单租期
    void updatePeriod2(@Param("orderId") Integer orderId, @Param("seconds") long seconds);

    //获取未支付或已支付账单
    TOrderBill getByOrderIdAndPeriod(@Param("orderId") Integer orderId, @Param("period") Integer period);

    //获取订单的买断账单
    List<TOrderBill> listBuyOutBillByOrderPid(@Param("orderPid") Integer orderPid);

    //获取订单账单列表（同步用）
    List<TOrderBill> listBillForSyncByOrderId(@Param("orderId") Integer orderId);

    //获取买断订单的账单信息
    TOrderBill findBuyoutBillByOrderId(@Param("orderId") Integer orderId);

    //获取单个订单账单列表
    List<Map> listOrderBill(@Param("orderCode") String orderCode);

    //获取客户账单列表
    List<TOrderBill> listCustomerBillsByOrderIds(@Param("orderIds") List<Integer> orderIds);
}
